package com.rxmvp.baselibrary.base;

import com.trello.rxlifecycle2.LifecycleProvider;

import io.reactivex.Flowable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;

/**
 * 处理rxjava的Flowable一些基本操作和跟随activity或fragment生命周期自动取消订阅的操作
 *
 * 作者： huangRZ on 2017/1/21. 15:04
 * 邮箱：917647409@qq.com
 */
public class RxHelper<E> {

    private E mEvent;

    @SuppressWarnings("unchecked")
    public <T> Flowable<T> getFlowable(Flowable<T> flowable,
                                                 LifecycleProvider<E> provider) {
        return flowable
                .compose(mEvent == null ? provider.<T>bindToLifecycle() : provider.<T>bindUntilEvent(mEvent)) //设置Subscriber跟随Activity的生命周期
                .subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                //设置这个后，规定时间内没有数据返回，则为超时，这时网络连接超时等操作将会无效
//                .timeout(5, TimeUnit.SECONDS)  //操作超时为5s
                .retry(2);  //重连2次
    }


    //设置在哪个生命周期发生时解绑，不设置默认跟随activity的生命周期
    public RxHelper<E> setLifecycleEvent(E activityEvent) {
        this.mEvent = activityEvent;
        return this;
    }

}
